package com.yizhuoyan.his.dao;

import java.io.Serializable;
import java.util.List;

public interface SelectDao<ID extends Serializable,E> {
    /**
     * 根据列对应的值查找唯一记录
     * @param propertyName 列名
     * @param propertyValue 列值
     * @return  唯一记录
     * @throws Exception exception
     */
    E selectOne(String propertyName, Object propertyValue)throws Exception;
    /**
     * 根据列对应的值查找所有记录
     * @param propertyName 列名
     * @param propertyValue 列值
     * @param orderBy 排序要求
     * @return  满足条件记录
     * @throws Exception exception
     */
    default List<E> selectMany(String propertyName, Object propertyValue,String orderBy)throws Exception{
        throw  new UnsupportedOperationException();
    }

    /**
     * 根据列对应的值查找所有记录
     * @param propertyName 列名
     * @param propertyValue 列值
     * @return 满足条件记录
     * @throws Exception exception
     */
    default  List<E> selectMany(String propertyName, Object propertyValue)throws Exception{
        return selectMany(propertyName,propertyValue,null);
    }
    /**
     * 判断指定列对应的值是否存在
     * @param propertyName 列名
     * @param propertyValue 列值
     * @return  是否存在
     * @throws Exception exception
     */
    boolean exists(String propertyName, Object propertyValue)throws Exception;
    /**
     * 模糊分页查询，按照account升序
     * 如果查询关键字为null，则查询全部
     * @param key 查询关键字
     * @param pageNo 查询页码（从1开始）
     * @param pageSize 每页大小
     * @return 查询结果
     * @throws Exception exception
     */
    default List<E> selectByKeyWithPagination(String key, int pageNo, int pageSize)throws Exception{
        return this.selectByKeyWithPagination(key,pageNo,pageSize,null);
    }

    default List<E> selectByKeyWithPagination(String key, int pageNo, int pageSize,String orderBy)throws Exception{
        throw  new UnsupportedOperationException();
    }
    /**
     * 查询全部
     * @param orderBy 排序方式 如“account asc”
     * @return 全部
     * @throws Exception  exception
     */
    List<E> selectAll(String orderBy)throws Exception;

}
